package com.nt.train.config;
import com.nt.train.dto.Cup;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
import org.springframework.beans.factory.support.AbstractBeanDefinition;
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
import org.springframework.beans.factory.support.BeanDefinitionRegistryPostProcessor;
/**
 * 使用 BeanDefinitionRegistryPostProcessor
 * 其实这种方式也是利用到了 BeanDefinitionRegistry，
 * 在Spring容器启动的时候会执行 BeanDefinitionRegistryPostProcessor 的 postProcessBeanDefinitionRegistry 方法，
 * 大概意思就是等beanDefinition加载完毕之后，对beanDefinition进行后置处理，
 * 可以在此进行调整IOC容器中的beanDefinition，从而干扰到后面进行初始化bean。
 * @author hlf
 * @version 1.0
 * @date 2022/8/3 16:33
 */
public class MyBeanDefinitionRegistryPostProcessor implements BeanDefinitionRegistryPostProcessor {
    @Override
    public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException {
        AbstractBeanDefinition beanDefinition = BeanDefinitionBuilder.rootBeanDefinition(Cup.class).getBeanDefinition();
        registry.registerBeanDefinition("cup", beanDefinition);
    }

    @Override
    public void postProcessBeanFactory(ConfigurableListableBeanFactory configurableListableBeanFactory) throws BeansException {

    }
}